iT邦幫忙

2026 iThome 鐵人賽

DAY 7
0
Software Development

從 Fragment 到 Compose — 老 Android App 重寫的架構取捨系列 第 7 篇

Day 07 | 導航:型別安全路由與 feature 的對外 API

  • 分享至 

  • xImage
  •  

動筆前的自問自答(兩題)

1.【決策邊界|架構論述】 本篇的規則是:feature 對外只暴露 NavGraphBuilder 擴充與 navigateToXxx,Screen 不持有 NavController。假設之後有個流程要「在 A feature 選完一筆資料,回到 B feature 的上一頁並把結果帶回去」(例如選完地址回到下單頁)。這條規則還撐得住嗎?你會用什麼方式把結果帶回去;什麼條件下你會放寬規則,讓 feature 直接拿到 NavController?

我的回答:
用什麼方式把結果帶回去:

  1. 用 Activity Scope 的 ViewModel 去賦值並在前一頁觀察資料,來獲得跨頁的資料流。
  2. 用全域的物件去拋接資料。
  3. 用 Fragment manager 去拿到前一頁的實例然後先把處理結果透過 setter 往回傳。
  4. 好像有個監聽器 API 可以知道跳回上一頁的觸發,並順勢拋接資料。
  5. Activity 的頁面用 intent 傳值。

這條規則還撐得住嗎?》我看不懂。而且我也忘了 NavController 是什麼。

FragmentManager 是管理 Fragment 的底層機制;NavController 是 Navigation Component 提供的較高階導航抽象。

較高階
┌──────────────────────────────┐
│ NavController │
│ 我要去哪一頁? │
│ back stack 怎麼處理? │
│ Navigation Graph 是什麼? │
└──────────────┬───────────────┘
│
│ Fragment-based Navigation 時
▼
┌──────────────────────────────┐
│ FragmentManager │
│ add / replace / remove │
│ Fragment lifecycle │
│ FragmentTransaction │
└──────────────────────────────┘
較底層
什麼條件下你會放寬規則,讓 feature 直接拿到 NavController? 》我沒想法耶。

2.【預測再驗證|UI 與版型】 照這個順序操作:從頂層 A 切換到頂層 B,在 B 按「開啟子頁」進入子頁,再按子頁上的「從子頁切換到頂層 B」。先預測:畫面最後停在哪一頁?back stack 長什麼樣?再到模擬器或手機上實際操作驗證,對照 navigateToTopLevel 的每一個設定,解釋為什麼。

我的回答:
(待補)


上一篇
Day 06 | UiState / UiEvent / UiEffect:單向資料流但不背 MVI 的儀式
下一篇
Day 08|Design system:token、theme、元件的邊界
系列文
從 Fragment 到 Compose — 老 Android App 重寫的架構取捨 共 11 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言